python模块之paramiko模块
paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。paramiko支持Linux, Solaris, BSD, MacOS X, Windows等平台通过SSH从一个平台连接到另外一个平台。利用该模块,可以方便的进行ssh连接和sftp协议进行sftp文件传输。
paramiko包里一共有种连接方式(两个类):SSHClient和Transport,每种连接方式都支持口令认证和证书认证。
paramiko也有一些其它的方法和属性。本文只介绍简单、常用的。
paramiko不是python基本模块,需是基于pycrypto模块,所以需要安装pycrypto,再安装paramiko
1 | pip3 install pycrypto # windows下多半是会报错的,原因是因为需要安装c++,并且设置变量。 |
paramiko—->SSHClient类——–>口令认证 证书认证
paramiko—->Transport类——–>口令认证 证书认证
一、SSHClient:用来远程执行命令
方法/属性名
1 | 1.connect() |
二、Transport:用来上传下载远程主机的文件
1 | 方法/属性名 作用 参数 示例 |
案例:
1 | 密码登陆方式代码如下: |
唯一要注意的就是遇到未知主机的时候,ssh的处理策略。这个要设置好。不然know_hosts文件里没有的主机在第一次登陆的时候会被拒绝掉。
使用SSH秘钥登陆的代码如下:
1 | #!/usr/bin/env python |
通过秘钥登陆的用户和密码登陆大同小异,只需定义私钥文件的位置然后引用pkey关键字就好了。
使用密码和SFTP命令上传和下载文件的代码如下:
1 | import paramiko |
使用秘钥和SFTP命令上传和下载文件的代码如下:
1 | import paramiko |
代码不难,但是从代码里可以到实现ssh和sftp的时候。创建连接时使用的方法不一样。
SSH是使用SSHClient()里面的connect方法创建的
1 | ssh = paramiko.SSHClient() |
SFTP使用的Transport()里面的connetc方法创建的
1 | transport = paramiko.Transport(('172.16.1.101',22)) |
两个都是connect方法有什么区别和联系呢?其实paramiko.SSHClient().connect()这个方法的内部实现调用的就是Transport().connect()这个方法。所以可以认为Transport()是paramiko里面创建连接的通用方法。那我们通过Transport方法来改写一下SSH的功能
1 | import paramiko |
这样如果我们要实现一个可以远程操作主机的程序,那么程序的远程执行命令和传输文件等功能就可以写到一个类里面了。示意代码如下:
1 | import paramiko |